; ModuleID = 'llvm_expressions/tigress-3-challenge-2.ll'
source_filename = "llvm_expressions/tigress-3-challenge-2.ll"
target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-linux-gnu"

; Function Attrs: norecurse nounwind readnone
define i64 @SECRET(i64 %SymVar_0) local_unnamed_addr #0 {
.3:
  %div = udiv i64 %SymVar_0, 7
  %.35 = lshr i64 %div, 49
  %.38 = shl i64 %div, 15
  %.42 = or i64 %.38, %.35
  %.46 = xor i64 %SymVar_0, -1
  %.47 = shl i64 %SymVar_0, 1
  %.48 = and i64 %.47, 1079864760
  %.49 = xor i64 %SymVar_0, 539932380
  %.50 = add i64 %.48, %.49
  %.51 = or i64 %.50, %.46
  %.52 = add i64 %SymVar_0, 1
  %.53 = add i64 %.52, %.51
  %.54 = and i64 %.53, %.42
  %.55 = shl i64 %.54, 1
  %.56 = xor i64 %.53, %.42
  %.57 = add i64 %.55, %.56
  %.59 = and i64 %.47, 38065236
  %.60 = xor i64 %SymVar_0, 19032618
  %.61 = add i64 %.59, %.60
  %.62 = xor i64 %.57, %.61
  %.63 = xor i64 %.57, 9223372036854775807
  %.64 = and i64 %.63, %.61
  %.67 = shl i64 %.64, 1
  %.68 = sub i64 %.62, %.67
  %.71 = lshr i64 %div, 1
  %.72 = or i64 %.71, 7
  %.73 = xor i64 %.72, -8
  %.74 = add nsw i64 %.73, %.71
  %.778 = or i64 %.74, 62
  %.81 = add nsw i64 %.74, 3
  %.82 = add i64 %.81, %.778
  %.87 = and i64 %.82, 63
  %.88 = lshr i64 %.50, %.87
  %.89 = sub i64 %.68, %.88
  %.90 = xor i64 %.68, -1
  %.91 = or i64 %.88, %.90
  %.92 = and i64 %.89, %.91
  %.94 = and i64 %.88, %.90
  %.95 = or i64 %.92, %.94
  %.103 = icmp sgt i64 %.95, -1
  br i1 %.103, label %.3.endif.endif.if, label %.3.endif.endif.else

.3.endif.endif.if:                                ; preds = %.3
  %.147 = and i64 %.50, %div
  %.148 = xor i64 %.147, -1
  %.150 = add nuw nsw i64 %div, 1
  %.152 = add i64 %.150, %.50
  %.153 = add i64 %.152, %.148
  %.179 = and i64 %.57, %.61
  %.180 = shl i64 %.179, 1
  %.182 = add i64 %.180, %.62
  %.185 = lshr i64 %.182, 1
  %.186 = or i64 %.185, 15
  %.187 = xor i64 %.186, -16
  %.188 = add nsw i64 %.187, %.185
  %.19110 = or i64 %.188, 62
  %.197 = sub i64 61, %.188
  %.199 = sub i64 %.197, %.19110
  %.204 = and i64 %.199, 63
  %.205 = lshr i64 %.153, %.204
  %.207 = xor i64 %div, -1
  %.208 = and i64 %.50, %.207
  br label %.3.endif.endif.endif

.3.endif.endif.else:                              ; preds = %.3
  %.261 = xor i64 %div, -1
  %.266 = and i64 %.61, %.261
  %.267 = add i64 %.266, %div
  %.268 = or i64 %.267, 31
  %.269 = xor i64 %.268, 1152921504606846944
  %.270 = add i64 %.269, %.267
  %.271 = shl i64 %.270, 4
  %.274 = add i64 %.271, 16
  %.275 = sub i64 -17, %.271
  %.301 = and i64 %.275, %.57
  %.302 = add i64 %.274, %.301
  %.303 = lshr i64 %.302, 32
  %.330 = and i64 %.303, 65535
  %.355 = shl i64 %.302, 32
  %.356 = and i64 %.355, 1095216660480
  %.362 = and i64 %.355, 280375465082880
  %.357 = and i64 %.302, -281470681808896
  %.363 = or i64 %.357, %.330
  %.368 = or i64 %.363, %.356
  %.373 = or i64 %.368, %.362
  %.374 = or i64 %.373, 15
  %.375 = xor i64 %.374, 4611686018427387888
  %.376 = add i64 %.375, %.373
  %.377 = shl i64 %.376, 2
  %.380 = add i64 %.377, 4
  %.381 = and i64 %.380, %.50
  %.382 = xor i64 %.381, -1
  %.384 = add i64 %.50, 1
  %.386 = add i64 %.384, %.380
  %.387 = add i64 %.386, %.382
  %.388 = and i64 %.387, %div
  %.389 = xor i64 %.388, -1
  %.391 = add nuw nsw i64 %div, 1
  %.393 = add i64 %.391, %.387
  %.394 = add i64 %.393, %.389
  %.395 = or i64 %.61, 31
  %.396 = xor i64 %.395, 2305843009213693920
  %.397 = add i64 %.396, %.61
  %.398 = shl i64 %.397, 3
  %.401 = add i64 %.398, 8
  %.402 = and i64 %.401, %.61
  %.403 = xor i64 %.402, -1
  %.405 = add i64 %.61, 1
  %.407 = add i64 %.405, %.401
  %.408 = add i64 %.407, %.403
  %.431 = and i64 %.373, %.408
  %.432 = shl i64 %.431, 1
  %.433 = xor i64 %.373, %.408
  %.434 = add i64 %.432, %.433
  %.437 = lshr i64 %.434, 1
  %.438 = or i64 %.437, 15
  %.439 = xor i64 %.438, -16
  %.440 = add nsw i64 %.439, %.437
  %.4439 = or i64 %.440, 62
  %.449 = sub i64 61, %.440
  %.451 = sub i64 %.449, %.4439
  %.456 = and i64 %.451, 63
  %.457 = lshr i64 %.394, %.456
  %.460 = and i64 %.387, %.261
  br label %.3.endif.endif.endif

.3.endif.endif.endif:                             ; preds = %.3.endif.endif.else, %.3.endif.endif.if
  %.486.sink = phi i64 [ %.433, %.3.endif.endif.else ], [ %.62, %.3.endif.endif.if ]
  %.485.sink = phi i64 [ %.432, %.3.endif.endif.else ], [ %.180, %.3.endif.endif.if ]
  %.460.pn = phi i64 [ %.460, %.3.endif.endif.else ], [ %.208, %.3.endif.endif.if ]
  %.458.sink.in = phi i64 [ %.457, %.3.endif.endif.else ], [ %.205, %.3.endif.endif.if ]
  %.458.sink = xor i64 %.458.sink.in, -1
  %.461.sink = add i64 %.460.pn, %div
  %.487 = add i64 %.485.sink, %.486.sink
  %.490 = lshr i64 %.487, 1
  %.491 = or i64 %.490, 15
  %.492 = xor i64 %.491, 48
  %.493 = add nuw i64 %.490, 1
  %.494 = add i64 %.493, %.492
  %.500 = and i64 %.494, 62
  %.501 = or i64 %.500, 1
  %.502 = shl i64 %.461.sink, %.501
  %.503 = and i64 %.502, %.458.sink
  %.504 = add i64 %.503, %.458.sink.in
  ret i64 %.504
}

attributes #0 = { norecurse nounwind readnone }
